var Vuex = {
  Store: function Store({ state,mutations,getters }) {
    this.state = state;
    //借助Vue的力量 ，把Vue参数中的data参数对象state变成响应式对象
    //如果在Vue中用到了state中的属性，
    var vm = new Vue({
        data:state,
        //key=doubleCount value=doubleCount的计算函数
        computed:Object.entries(getters).reduce((obj,[key,value])=>{
            //obj.doubleCount=()=>value(state);
            obj[key]=()=>value(state);
            return obj;
        },{}),
      /*   computed:{
            doubleCount:()=>{
                return { count: 1 }.count*2;
            }
        } */
    });
    //store.getters=vm  store.getters.doubleCount
    this.getters = vm;
    this.commit = (mutationType)=>{
        //通过变更的类型去mutations对象中找到应的函数
        const mutationFn = mutations[mutationType];
        mutationFn(state);
    }
  },
  //如果这是一个插件，就必须提供一个install的函数
  //当调用Vue.use()的时候会调用此函数进行安装，调用时会把Vue传过来
  install: function (Vue) {
    //你在混入对象中定义的任何选项都将被混入到每一个创建的 Vue 实例
    Vue.mixin({
      beforeCreate() {
        //判断当前选项有没有传递store参数
        if (this.$options.store) {
          //如果传递了，则把选项中的store保存到Vue原型对象的$store属性上
          Vue.prototype.$store = this.$options.store;
        }
      },
    });
  },
};
